/**
 * @IAstrutsContext.as
 * 
 * @author sodaChen mail:asframe@163.com
 * @version 1.0
 * <br>Copyright (C), 2012 ASFrame.com
 * <br>This program is protected by copyright laws.
 * <br>Program Name:ASFrame AStruts2
 * <br>Date:2012-4-1
 */
package com.asframe.astruts2.context
{
	import com.asframe.astruts2.interfaces.IRootContainer;
	import com.asframe.load.ILoader;
	import com.asframe.loading.ILoading;
	import com.asframe.pattern.observer.ISendNotice;

	/**
	 * Astruts2上下文。属于中心对象
	 * @author sodaChen
	 * @Date:2012-4-1
	 */
	public interface IAStrutsContext extends ISendNotice
	{
		/**
		 * 获取到显示对象的根容器 
		 * @return 
		 * 
		 */		
		function getRootContainer():IRootContainer;
		/**
		 * 注册一个View对象
		 * @param viewClass View的Class对象（默认ViewName为View的类名称）
		 * @param viewName view在容器中的唯一名称，默认为空时则为View对象本身的类型
		 * @param mediatorClasses view的Mediator数组
		 * 
		 */		
		function registerView(viewName:String,viewClass:Class, ...mediatorClasses):void;
		/**
		 * 取消view的注册，该方法会使已经存在view进行关闭，如果没有开启则会把注册的相关方法都释放掉
		 * 只有重新调用registerView才能再次激活
		 * @param viewName
		 * 
		 */		
		function unregisterView(viewName:String):void;
		/**
		 * 销毁view所带来的一切开销，包括view和mediator实例，恢复到刚registerView的状态
		 * @param viewName
		 * 
		 */		
		function disposeView(viewName:String):void;
		/**
		 * 向容器注册一个实例 
		 * @param bean 实例
		 * @param name 唯一名称，可选。没有值时为默认类的名称
		 * 
		 */		
		function registerBean(bean:*,name:String = null):void;
		/**
		 * 取消一个已经注册的对象。
		 * @param name
		 */		
		function unregisterBean(name:String):void;
		/**
		 * 获取到指定对象的实例(包括View，Mediator，Cmd，以及注册的bean实例) 
		 * @param name 唯一名称
		 * @return 
		 */		
		function getBean(name:String):*;
	}
}
